/*
 * Copyright Hundsun Technologies Inc. All Rights Reserved.
 */

package txpool

import (
	"hundsun.com/hsl/hschain/protos"
	protosledger "hundsun.com/hsl/hschain/protos/ledger"
)

// PendingTxPool 交易缓冲池，缓存P2P模块发送过来的交易
// 当交易进入缓冲后会被设置一个过期时间 默认8h
type PendingTxPool interface {
	// AddTransaction 向交易缓冲池中添加一条交易
	AddTransaction(tx *protosledger.Transaction) error

	// AddTransactions 向交易缓冲池中添加一批交易
	AddTransactions(txs []*protosledger.Transaction) error

	// 获取交易池中某一笔交易
	GetTransaction(txHash protos.Hash) (*protosledger.Transaction, error)

	// PreRemoveTransactions 从交易缓冲池中获取一批待出块的交易，获取的最大条数由limit参数决定，
	// 返回的交易会被标记为“待删除”
	PreRemoveTransactions(limit int) ([]*protosledger.Transaction, error)

	// 将特定交易标记为“待删除”（返回值[]int：影响记录的条数）
	PreRemoveSpecifiedTransactions(txHashes []protos.Hash) ([]int64, error)

	// UnmarkTransactions 去掉交易上的“待删除”标记（返回值[]int：影响记录的条数）
	UndoPreRemoveTransactions(txHashes []protos.Hash) ([]int64, error)

	// RemoveTransactions 从缓冲池中批量移除交易
	RemoveTransactions(txHashes []protos.Hash) error

	//PeekTx query transaction from txpool
	PeekTx(hash protos.Hash) (*protosledger.Transaction, error)
	//TxPoolNum query number of transactions that prepare pending
	TxPoolNum() int
	//TxPoolHashes query hashes of transactions prepare pending
	TxPoolHashes(num uint) []string
}
